// 什么叫高阶函数”异步“中
// 什么叫异步 1）执行后的返回结果不能马上获取 ajax 等待同步代码执行后 才会获取结果

/*
setTimeout(() => {
  console.log('100000')
}, 1000) 

while(true) {
  console.log('000')
}
// 永远不会打印
**/

// node中 文件操作都是异步的
let fs = require('fs')
// 异步的解决方案 最早即使基于回调函数的 不能使用try catch 来解决异常
// node中的回调函数的第一个参数 永远是error

// 错误的做法
// try {
//   fs.readFile('./age.txt', 'utf8', function(err, data){
//     console.log(data)
//   })
// } catch (error) {
  
// }

// 回调地狱 
// 读取age和name  用他们的结果 作为一个对象

// 基于回调的方式来获取最终的结果
function after(times, cb) {
  let renderObj = {}
  return function(key, value){
    renderObj[key] = value
    if(--times == 0 ){ // times永远取的是外层作用域下的变量
      cb(renderObj)
    }
  }
}
let out = after(2, function(renderObj) {
  console.log(renderObj)
})
fs.readFile('./age.txt', 'utf8', function(err, data){
  console.log(data)
  out('age', data)
})
fs.readFile('./name.txt', 'utf8', function(err, data){
  console.log(data)
  out('name', data)
})





